package com.tomdayu.server;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 监听webSocket地址/myWs
 */
@ServerEndpoint("/myWs")
@Component
public class WsServiceEndPoint {
    static Map<String, Session> sessionMap = new ConcurrentHashMap<>();

    /**
     * websocket客户端连接websocket服务端时，需要声明一下服务端做了哪些事情
     * 定义连接建立时执行的操作
     */
    @OnOpen
    public void onOpne(Session session) {//每一个websocket连接对服务端来说都是一个session
        //1.客户端要连接服务器端，服务端拿到session，就要保留和服务器端的websocket连接：存下session
        //2.访问myWs的客户端可能有很多，因此session应该放在map里
        sessionMap.put(session.getId(), session);
        System.out.println("websocket is open");
    }

    @OnMessage
    public String onMessage(String text) {
        System.out.println("收到一条消息");
        return "已收到你的消息";
    }

    @OnClose
    public void onClose(Session session) {
        sessionMap.remove(session.getId());
        System.out.println("");
    }

    @Scheduled(fixedRate = 2000)
    public void sendMsg() {
        //给客户端发送心跳信息
    }

}
